// JavaScript logic for the accounting term matching game

const financialTerms = [
    "资产", "负债", "所有者权益", "收入", "费用", "利润", "会计主体", 
    "持续经营", "会计分期", "货币计量", "权责发生制", "收付实现制", 
    "历史成本", "重置成本", "可变现净值", "公允价值", "财务报表", "资产负债表",
    "利润表", "现金流量表", "流动比率", "速动比率", "存货周转率", 
    "应收账款周转率", "增值税", "企业所得税", "递延所得税", "审计意见",
    "内部控制", "税务筹划", "发票认证", "进项税额", "商誉减值", 
    "金融工具确认", "合并财务报表", "股份支付", "租赁会计", "企业合并", 
    "外币折算", "每股收益", "短期借款", "应付账款", "应付票据", "合同负债",
    "职工薪酬", "应交税费", "实收资本", "资本公积", "留存收益", "研发费用加计扣除",
    "个人所得税汇算清缴", "税务稽查", "税收保全", "常设机构", "税收协定", "国际税收",
    "本量利分析", "审计抽样", "反向购买", "税务行政复议", "关税完税价格",
    "非居民税收管理", "资产减值损失", "公允价值套期", "关键审计事项",
    "土地增值税清算", "纳税信用评级", "税务鉴证报告", "交易性金融资产", 
    "固定资产折旧", "长期股权投资", "投资性房地产", "套期会计", "衍生金融资产",
    "资本预算", "净现值", "内部收益率", "营运资金管理", "成本性态分析", "股东会决议",
    "要约与承诺", "税收抵免", "转让定价", "内幕交易", "破产清算程序", "消费税",
    "进项税额转出", "留抵退税", "财务杠杆", "经济增加值", "平衡计分卡", 
    "商誉减值测试", "政府补助", "作业成本法", "可转换公司债券", "融资租赁",
    "债务重组", "每股收益", "税务行政诉讼", "盈亏临界点", "跨境关联交易", 
    "受控外国企业规则","金融资产重分类", "预计负债计量", "或有对价确认", "资产弃置义务", 
    "会计政策变更追溯调整", "前期差错更正", "财务报表可比期间数据", "分部信息报告", 
    "终止经营列报", "每股收益列示", "关联方披露", "会计估计变更说明","土地增值税清算条件",
     "增值税留抵退税", "消费税复合计税", "企业所得税特别纳税调整", "个人所得税专项附加扣除", 
     "关税完税价格核定", "国际税收情报交换", "非居民企业源泉扣缴", "税务行政复议时限", 
     "纳税信用等级修复", "涉税专业服务协议", "税务司法鉴定程序","反向购买处理", "股份支付等待期", 
     "合并商誉确认", "套期保值有效性", "企业合并对价分摊", "分部报告披露", "关联方交易披露", 
     "关键审计事项", "持续经营假设评估", "会计估计不确定性", "公允价值层次划分", "现金流量套期储备", 
     "其他综合收益重分类","外币报表折算差额", "可转换公司债券", "作业成本法", "融资租赁负债", 
     "债务重组利得", "每股收益稀释", "持有至到期投资", "可供出售金融资产", "资产组减值测试",
      "总部资产分摊", "非货币性资产交换", "借款费用资本化", "资产负债表日后调整事项","会计循环",
       "辅助生产成本", "政府补助", "其他综合收益", "试算平衡", "原始凭证审核", "科目汇总表", 
       "永续盘存制", "实地盘存制", "银行对账单", "未达账项", "财产清查", "记账凭证汇总", 
       "多栏式日记账", "财务费用确认", "关键会计政策说明", "财务报表附注", "财务报表"
    // ...（此处可继续补充至1000个）
];

let selectedCells = [];
let currentLevel = 1;

// 动态生成游戏盘
function generateGrid(size) {
    const gridSize = size * size;
    const terms = [];
    // 确保名词成对出现
    while (terms.length < gridSize) {
        const term = financialTerms[Math.floor(Math.random() * financialTerms.length)];
        terms.push(term, term); // 确保成对
    }
    terms.length = gridSize; // 截断为当前关卡所需数量
    return shuffleArray(terms);
}

// 初始化游戏
function initGame() {
    const size = 4 + (currentLevel - 1) * 2;
    const gameDiv = document.getElementById('game');
    gameDiv.style.gridTemplateColumns = `repeat(${size}, 60px)`;
    gameDiv.innerHTML = '';

    const terms = generateGrid(size);
    terms.forEach((term, index) => {
        const cell = document.createElement('div');
        cell.className = 'cell';
        cell.textContent = term;
        cell.style.height = '60px';
        adjustFontSize(cell);
        cell.addEventListener('click', () => handleClick(cell, index));
        gameDiv.appendChild(cell);
    });
}

function adjustFontSize(cell) {
    const textLength = cell.textContent.length;
    if (textLength <= 4) {
        cell.style.fontSize = '14px';
    } else if (textLength <= 8) {
        cell.style.fontSize = '12px';
    } else {
        cell.style.fontSize = '10px';
    }
    cell.style.lineHeight = '1.2';
}

// 处理点击事件
function handleClick(cell, index) {
    if (cell.classList.contains('matched')) return;

    cell.style.backgroundColor = '#FFB6C1';
    selectedCells.push({ cell, index });

    if (selectedCells.length === 2) {
        const [first, second] = selectedCells;
        if (first.cell.textContent === second.cell.textContent && first.index !== second.index) {
            first.cell.classList.add('matched');
            second.cell.classList.add('matched');
            checkGameOver();
        }
        setTimeout(() => {
            selectedCells.forEach(c => c.cell.style.backgroundColor = '#f0f8ff');
            selectedCells = [];
        }, 500);
    }
}

// 检查是否过关
function checkGameOver() {
    const remaining = document.querySelectorAll('.cell:not(.matched)').length;
    if (remaining === 0) {
        currentLevel++;
        document.getElementById('level').textContent = currentLevel;
        setTimeout(() => initGame(), 1000);
    }
}

// 工具函数：数组洗牌
function shuffleArray(array) {
    for (let i = array.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [array[i], array[j]] = [array[j], array[i]];
    }
    return array;
}

// 启动游戏
initGame();